A primeira função que utilizaremos,
carregar_dados_brutos_xlsx(), irá carregar a planilha de
dados do SMART em formato excel. Essa função carrega um arquivo do tipo
.xlsx e gerar automaticamente o arquivo backup nomeado como
dados_brutos_SMART.rds na pasta data-raw. A
função seguinte a ser utilizada,
gerar_dados_completos_SMART() que irá carregar o arquivo
dados_brutos_SMART.rds. Essa função foi escrita para
carrega os dados e operar uma série de transformações para devolvê-lo
mais próximo ao necessário para conduzir as análises. Como exemplo,
utilizaremos o arquivo monitora_masto_aves_SMART.xlsx.
Antes de começar o carregamento dos dados é necessário carregar as
funções necessárias utilizando o comando source().
# carregar as funções necessárias
source(here::here("R/carregar_dados_brutos_xlsx.R"))
source(here::here("R/gerar_dados_completos_SMART.R"))
Para carregar a nova base de dados, é importante que ela esteja salva
na pasta data-raw do projeto Monitora. Para isso, basta
manter a estrutura de pastas do projeto (veja o README do repositório).
No corpo da função, deve ser informado o caminho para o arquivo (ex.
nome da pasta, data-raw, e o nome do arquivo,
monitora_masto_aves_2023_04_04.xlsx).
# carregar a base de dados do Monitora
dados_brutos_SMART <- carregar_dados_brutos_xlsx(
dados = "data-raw/monitora_masto_aves_SMART.xlsx",
sheet = 3
)
head(dados_brutos_SMART)
dplyr::glimpse(dados_brutos_SMART)
Rows: 27,940
Columns: 34
$ `CDUC (código da unidade de conservação)` <dbl> …
$ `Local - Nome da Unidade de Conservação` <chr> …
$ `Número da Estação Amostral` <dbl> …
$ `Nome da EA` <chr> …
$ `Esforço de amostragem tamanho da trilha (m)` <dbl> …
$ `data de início da amostragem` <dttm> …
$ `data de término da amostragem` <lgl> …
$ `Ano da amostragem` <dbl> …
$ `Estação do ano` <chr> …
$ `Horário de início` <dttm> …
$ `Horário de término` <dttm> …
$ `Tempo de censo` <dttm> …
$ `Velocidade (km/h)` <dbl> …
$ `Condição Climática/Tempo` <chr> …
$ `ID Observadores` <lgl> …
$ `ID líder` <lgl> …
$ `Nome dos observadores` <chr> …
$ `Nome do líder` <lgl> …
$ `ID observação` <lgl> …
$ `Número do animal no guia` <dbl> …
$ classe <chr> …
$ ordem <chr> …
$ familia <chr> …
$ gênero <chr> …
$ especie <chr> …
$ `nome popular` <lgl> …
$ `O que foi identificado` <chr> …
$ `Nº animais encontrados` <dbl> …
$ `tinha mais?` <lgl> …
$ `distância da trilha (metros)` <dbl> …
$ `Número da próxima plaqueta` <dbl> …
$ `Problema na amostragem?` <chr> …
$ Longitude <lgl> …
$ Latitude <lgl> …
Em seguida, usamos a função
gerar_dados_completos_SMART().
# gerar dados completos
dados_completos_SMART <- gerar_dados_completos_SMART(dados_brutos_SMART)
head(dados_completos_SMART)
dplyr::glimpse(dados_completos_SMART)
Rows: 26,473
Columns: 20
$ nome_ea <fct> ana, ana, ana, ana, ana, …
$ n_visitas_repetidas <int> 67, 67, 67, 67, 67, 67, 6…
$ codigo_uc <dbl> 259, 259, 259, 259, 259, …
$ categoria_uc <fct> resex, resex, resex, rese…
$ nome_uc <fct> resex_tapajos_arapiuns, r…
$ nome_uc_abv <fct> rta, rta, rta, rta, rta, …
$ numero_ea <dbl> 6, 6, 6, 6, 6, 6, 6, 6, 6…
$ data_amostragem <dttm> 2015-02-25, 2015-02-25, …
$ estacao <fct> chuvosa, chuvosa, chuvosa…
$ ano <dbl> 2015, 2015, 2015, 2015, 2…
$ esforco_dia <dbl> 5000, 5000, 5000, 5000, 5…
$ esforco_total <dbl> 335000, 335000, 335000, 3…
$ nome_sp <fct> dasyprocta_leporina, maza…
$ nome_sp_abv <fct> dasy_lepo, maza_sp, dasy_…
$ validacao <fct> especie, genero, especie,…
$ distancia <dbl> 10, 5, 0, 3, 3, 5, 12, 18…
$ tamanho_grupo <dbl> 1, 1, 1, 2, 1, 1, 1, 1, 2…
$ velocidade_km_h <dbl> 0.5555556, NA, NA, 0.5555…
$ tempo_censo <drtn> 540 mins, 540 mins, 540 …
$ numero_observadores <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1…
Para garantir a reprodutibilidade dos códigos produzidos em versões
atualizadas da base de dados do Monitora, é importante tomar alguns
cuidados. O primeiro e mais importante cuidado é manter a
consistência dos nomes, da ordem e do número de colunas em
versões atualizadas da base de dados do Monitora. Além de carregar os
dados, a função carregar_dados_completos() aplica uma série
de transformações nas colunas. Seus nomes são alterados, e a essas são
atribuídos tipos apropriados (data, caracter, fator, inteiro e
numérico), linhas são eliminadas e novas colunas são geradas. Qualquer
alteração no número de colunas, nos seus nomes ou na sua ordem levará a
um mal funcionamento da função de transformação dos dados.
Outros aspectos importantes incluem:
a presença de dados ausentes (NAs) são
automaticamente substituidas pelo valor correto apenas nas colunas
nome_ea, esforco_dia e
tempo_senso;
novos dados devem ser adicionados a planilha de dados utilizada como modelo no presente documento;
se novas Unidades de Conservação para além das 41 presentes nessa planilha forem adicionadas, a função pode deixar de funcionar. Nesse caso, entre em contato com os desenvolvedores via e-mail: vntborgesjr@gmail.com;
os nomes dos observadores devem ser separados por ” e “,” E “,”/“,”;“, ou” a “. Note que, quando presentes, os espaços são importantes e devem ser aplicados para separação dos nomes;
na coluna vaildacao (coluna “O que foi identificado”
na planilha original) espécie deve ser identificado como “E”, “e”, ou
“espécie”; gênero deve ser identificado como “G”, “g”, ou “gênero”;
família deve ser identificada como “F”; e ordem deve ser identificada
como “O”.
A partir de agora os dados estão prontos para serem explorados, ou
mesmo filtrados e transformados para o formato do pacote
Distance para análise de densidade. Por exemplo, filtrar os
dados para a UC cujos os dados foram introduzidos a partir do SMART:
# carregar função de filtragem dos dados
source(here::here("R/filtrar_dados.R"))
# filtrar dados por Unidade de Conservação e por espécie
dados_filtrados_SMART <- filtrar_dados(
dados = dados_completos_SMART,
nome_ucs = "rds_uatuma"
)
head(dados_filtrados_SMART)
str(dados_filtrados_SMART)
tibble [53 × 20] (S3: tbl_df/tbl/data.frame)
$ nome_ea : Factor w/ 73 levels "ana","angelin",..: 41 41 41 41 41 41 41 41 41 41 ...
$ n_visitas_repetidas: int [1:53] 1 1 1 1 1 1 1 1 1 1 ...
$ codigo_uc : num [1:53] NA NA NA NA NA NA NA NA NA NA ...
$ categoria_uc : Factor w/ 6 levels "esec","flona",..: 4 4 4 4 4 4 4 4 4 4 ...
$ nome_uc : Factor w/ 41 levels "esec_da_terra_do_meio",..: 26 26 26 26 26 26 26 26 26 26 ...
$ nome_uc_abv : Factor w/ 39 levels "em","en","esgt",..: 31 31 31 31 31 31 31 31 31 31 ...
$ numero_ea : num [1:53] 1 1 1 1 1 1 1 1 1 1 ...
$ data_amostragem : POSIXct[1:53], format: "2023-06-14" ...
$ estacao : Factor w/ 4 levels "chuvosa","final_de_chuva",..: 3 3 3 3 3 3 3 3 3 3 ...
$ ano : num [1:53] 2023 2023 2023 2023 2023 ...
$ esforco_dia : num [1:53] 4396 4396 4396 4396 4396 ...
$ esforco_total : num [1:53] 4396 4396 4396 4396 4396 ...
$ nome_sp : Factor w/ 267 levels "a_louatta_juara",..: 172 198 88 223 92 119 258 86 54 69 ...
$ nome_sp_abv : Factor w/ 260 levels "a_lou_juar","abur_cuju",..: 166 192 86 217 90 115 251 84 56 73 ...
$ validacao : Factor w/ 5 levels "especie","familia",..: 1 1 3 3 1 3 1 1 1 1 ...
$ distancia : num [1:53] NA NA NA NA NA 0 4 8 0 3 ...
$ tamanho_grupo : num [1:53] 1 1 2 4 1 1 2 1 2 4 ...
$ velocidade_km_h : num [1:53] 24381 24381 24381 24381 24381 ...
$ tempo_censo : 'difftime' num [1:53] 259.633333333333 259.633333333333 259.633333333333 259.633333333333 ...
..- attr(*, "units")= chr "mins"
$ numero_observadores: num [1:53] 4 4 4 4 4 4 4 4 4 4 ...
Agora, podemos contar o número de observações validadas:
# carregar a função de contagem das observações validadas
source(here::here("R/contar_n_obs_validadas.R"))
# contar observações validadas ao nível de espécie
n_obs_validadas <- contar_n_obs_validadas(dados_filtrados_SMART)
n_obs_validadas
Vamos selecionar uma espécie da RDS Uatumã para então transformar os
dados para o formato de análise do pacote Distance.
Primeiro vamos avaliar qual foi a espécie mais abundante:
# carregar a função para contar número de observações por espécie e plotar os dados
source(here::here("R/contar_n_obs_sp.R"))
source(here::here("R/plotar_n_obs_sp_interativo.R"))
# contar o número de observações por espécie
n_obs_sp <- contar_n_obs_sp(dados_filtrados_SMART)
n_obs_sp
# plotar o número de observações por espécie
plotar_n_obs_sp_interativo(n_obs_sp)
A espécie mais abundante foi Crypturellus sp. Vamos filtrar os dados somente para esse espécie:
dados_filtrados_crypt_SMART <- filtrar_dados(
dados = dados_filtrados_SMART,
nome_sps = "crypturellus"
)
head(dados_filtrados_crypt_SMART)
str(dados_filtrados_crypt_SMART)
tibble [9 × 20] (S3: tbl_df/tbl/data.frame)
$ nome_ea : Factor w/ 73 levels "ana","angelin",..: 41 41 41 41 41 41 41 41 41
$ n_visitas_repetidas: int [1:9] 1 1 1 1 1 1 1 1 1
$ codigo_uc : num [1:9] NA NA NA NA NA NA NA NA NA
$ categoria_uc : Factor w/ 6 levels "esec","flona",..: 4 4 4 4 4 4 4 4 4
$ nome_uc : Factor w/ 41 levels "esec_da_terra_do_meio",..: 26 26 26 26 26 26 26 26 26
$ nome_uc_abv : Factor w/ 39 levels "em","en","esgt",..: 31 31 31 31 31 31 31 31 31
$ numero_ea : num [1:9] 1 1 1 1 1 1 1 1 1
$ data_amostragem : POSIXct[1:9], format: "2023-06-14" ...
$ estacao : Factor w/ 4 levels "chuvosa","final_de_chuva",..: 3 3 3 3 3 3 3 3 3
$ ano : num [1:9] 2023 2023 2023 2023 2023 ...
$ esforco_dia : num [1:9] 4396 4396 4396 4396 4396 ...
$ esforco_total : num [1:9] 4396 4396 4396 4396 4396 ...
$ nome_sp : Factor w/ 267 levels "a_louatta_juara",..: 88 88 88 88 88 88 88 88 88
$ nome_sp_abv : Factor w/ 260 levels "a_lou_juar","abur_cuju",..: 86 86 86 86 86 86 86 86 86
$ validacao : Factor w/ 5 levels "especie","familia",..: 3 3 3 3 3 3 3 3 3
$ distancia : num [1:9] NA NA 6 9 13 1 17 1 2
$ tamanho_grupo : num [1:9] 2 1 3 3 1 4 2 2 3
$ velocidade_km_h : num [1:9] 24381 24381 24381 24381 24381 ...
$ tempo_censo : 'difftime' num [1:9] 259.633333333333 259.633333333333 259.633333333333 259.633333333333 ...
..- attr(*, "units")= chr "mins"
$ numero_observadores: num [1:9] 4 4 4 4 4 4 4 4 4
Finalmente, vamos transformar os dados para o formato de análise:
# carregar função de transformação dos dados para o formato do pacote Distance
source(here::here("R/transformar_dados_formato_Distance.R"))
# transformar dados para o formato do pacote Distance
dados_transformados_SMART <- transformar_dados_formato_Distance(dados_filtrados_crypt_SMART)
head(dados_transformados_SMART)
dplyr::glimpse(dados_transformados_SMART)
Rows: 9
Columns: 12
$ Region.Label <fct> rds_uatuma, rds_uatuma, rds_uatu…
$ Area <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0
$ Sample.Label <fct> na, na, na, na, na, na, na, na, …
$ Effort <dbl> 4396, 4396, 4396, 4396, 4396, 43…
$ sampling_day <dttm> 2023-06-14, 2023-06-14, 2023-06-…
$ distance <dbl> NA, NA, 6, 9, 13, 1, 17, 1, 2
$ season <fct> na, na, na, na, na, na, na, na,…
$ year <dbl> 2023, 2023, 2023, 2023, 2023, 20…
$ size <dbl> 2, 1, 3, 3, 1, 4, 2, 2, 3
$ cense_time <drtn> 259.6333 mins, 259.6333 mins, 25…
$ speed <dbl> 24381.46, 24381.46, 24381.46, 24…
$ object <int> 1, 2, 3, 4, 5, 6, 7, 8, 9